Tailwind CSS์ ์์ ๊ฐ ์ง์ ๋ฐ ์ปค์คํ ์คํ์ผ๋ง ์ต์ ์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ํ์ํ์ฌ ๋ ์ฐฝ์ ์ด๊ณ ๋ฐ์ํ์ธ ๋์์ธ์ ํจ์จ์ ์ผ๋ก ๋ง๋ค์ด ๋ณด์ธ์.
Tailwind CSS ๋ง์คํฐํ๊ธฐ: ์์ ๊ฐ ์ง์ ๋ฐ ์ปค์คํ ์คํ์ผ๋ง ํ์ฉ
Tailwind CSS๋ ์ ํธ๋ฆฌํฐ ์ฐ์ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ํ๋ช ์ ์ผ์ผ์ผฐ์ต๋๋ค. ๋ฏธ๋ฆฌ ์ ์๋ ํด๋์ค ์ธํธ๋ฅผ ํตํด ์์๋ฅผ ๋น ๋ฅด๊ณ ์ผ๊ด๋๊ฒ ์คํ์ผ๋งํ ์ ์์ต๋๋ค. ํ์ง๋ง Tailwind์ ์ง์ ํ ํ์ ๋ฏธ๋ฆฌ ์ ์๋ ๊ฒ์ ๋์ด ์์ ๊ฐ ์ง์ ๋ฐ ํ ๋ง ์ปค์คํฐ๋ง์ด์ง์ ํตํด ์ปค์คํ ์คํ์ผ๋ง์ ์์ฉํ๋ ๋ฅ๋ ฅ์ ์์ต๋๋ค. ์ด ๊ธ์ ์ด๋ฌํ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ๋ง์คํฐํ๊ธฐ ์ํ ํฌ๊ด์ ์ธ ๊ฐ์ด๋๋ฅผ ์ ๊ณตํ์ฌ, ๋ค์ํ ๋์์ธ ์๊ตฌ์ฌํญ์ ๊ฐ์ง ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก Tailwind CSS๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์ฐฝ์ ์ด๊ณ ๊ณ ๋๋ก ๋ง์ถคํ๋ ๋์์ธ์ ๋ง๋ค ์ ์๋๋ก ๋์ต๋๋ค.
Tailwind CSS์ ์ ํธ๋ฆฌํฐ ์ฐ์ ์ ๊ทผ ๋ฐฉ์ ์ดํดํ๊ธฐ
ํต์ฌ์ ์ผ๋ก, Tailwind CSS๋ ์ ํธ๋ฆฌํฐ ์ฐ์ ํ๋ ์์ํฌ์
๋๋ค. ์ด๋ ๋ชจ๋ ์์์ ๋ํด ์ปค์คํ
CSS๋ฅผ ์์ฑํ๋ ๋์ , ๋ฏธ๋ฆฌ ์ ์๋ ์ ํธ๋ฆฌํฐ ํด๋์ค๋ฅผ HTML์ ์ง์ ์ ์ฉํ์ฌ ์คํ์ผ์ ๊ตฌ์ฑํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ๋์ ๋ฐฐ๊ฒฝ๊ณผ ํฐ์ ํ
์คํธ๋ฅผ ๊ฐ์ง ๋ฒํผ์ ๋ง๋ค๋ ค๋ฉด bg-blue-500
๋ฐ text-white
์ ๊ฐ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ๋น ๋ฅธ ๊ฐ๋ฐ: ์คํ์ผ์ด HTML์ ์ง์ ์ ์ฉ๋์ด HTML๊ณผ CSS ํ์ผ ๊ฐ์ ์ปจํ ์คํธ ์ ํ์ด ํ์ ์์ต๋๋ค.
- ์ผ๊ด์ฑ: ์ ํธ๋ฆฌํฐ ํด๋์ค๋ ํ๋ก์ ํธ ์ ๋ฐ์ ๊ฑธ์ณ ์ผ๊ด๋ ๋์์ธ ์ธ์ด๋ฅผ ๋ณด์ฅํฉ๋๋ค.
- ์ ์ง๋ณด์์ฑ: ์คํ์ผ ๋ณ๊ฒฝ์ด HTML ๋ด์์ ์ง์ญํ๋์ด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ ์งํ๊ณ ์ ๋ฐ์ดํธํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค.
- CSS ํฌ๊ธฐ ๊ฐ์: Tailwind์ PurgeCSS ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์๋ ์คํ์ผ์ ์ ๊ฑฐํ์ฌ CSS ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ํ์ด์ง ๋ก๋ ์๊ฐ์ ๋จ์ถํฉ๋๋ค.
ํ์ง๋ง ๋ฏธ๋ฆฌ ์ ์๋ ์ ํธ๋ฆฌํฐ ํด๋์ค๊ฐ ์ถฉ๋ถํ์ง ์์ ์ํฉ์ด ์์ต๋๋ค. ์ด๋ Tailwind์ ์์ ๊ฐ ์ง์ ๋ฐ ์ปค์คํ ์คํ์ผ๋ง์ด ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค.
์์ ๊ฐ ์ง์์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ ํ์ฉํ๊ธฐ
Tailwind CSS์ ์์ ๊ฐ ์ง์์ ์ฌ์ฉํ๋ฉด ์ ํธ๋ฆฌํฐ ํด๋์ค ๋ด์์ ์ง์ ๋ชจ๋ CSS ๊ฐ์ ์ง์ ํ ์ ์์ต๋๋ค. ์ด๋ Tailwind์ ๊ธฐ๋ณธ ๊ตฌ์ฑ์ ํฌํจ๋์ง ์์ ํน์ ๊ฐ์ด ํ์ํ๊ฑฐ๋, Tailwind ๊ตฌ์ฑ ํ์ผ์ ์์ ํ์ง ์๊ณ ๋น ๋ฅด๊ฒ ๋์์ธ ํ๋กํ ํ์
์ ๋ง๋ค ๋ ํนํ ์ ์ฉํฉ๋๋ค. ๊ตฌ๋ฌธ์ ์ ํธ๋ฆฌํฐ ํด๋์ค ์ด๋ฆ ๋ค์ ๋๊ดํธ []
๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ ๊ฐ์ ๋ฌถ๋ ๋ฐฉ์์
๋๋ค.
๊ธฐ๋ณธ ๊ตฌ๋ฌธ
์์ ๊ฐ์ ์ฌ์ฉํ๋ ์ผ๋ฐ์ ์ธ ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
class="utility-class-[value]"
์๋ฅผ ๋ค์ด, margin-top์ 37px๋ก ์ค์ ํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํฉ๋๋ค:
<div class="mt-[37px]">...</div>
์์ ๊ฐ ์ฌ์ฉ ์์
๋ค์์ ๋ค์ํ ์๋๋ฆฌ์ค์์ ์์ ๊ฐ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ๋ช ๊ฐ์ง ์์์ ๋๋ค:
1. ์ปค์คํ ๋ง์ง ๋ฐ ํจ๋ฉ ์ค์
Tailwind์ ๊ธฐ๋ณธ ๊ฐ๊ฒฉ ์ค์ผ์ผ์์ ์ฌ์ฉํ ์ ์๋ ํน์ ๋ง์ง์ด๋ ํจ๋ฉ ๊ฐ์ด ํ์ํ ์ ์์ต๋๋ค. ์์ ๊ฐ์ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ๊ฐ์ ์ง์ ์ ์ํ ์ ์์ต๋๋ค.
<div class="mt-[2.75rem] ml-[15px] px-[30px] py-[12px]">
This element has custom margins and padding.
</div>
2. ์ปค์คํ ์์ ์ ์
Tailwind๋ ๋ค์ํ ์์ ํ๋ ํธ๋ฅผ ์ ๊ณตํ์ง๋ง, ๊ธฐ๋ณธ ํ ๋ง์ ํฌํจ๋์ง ์์ ํน์ ์์์ ์ฌ์ฉํด์ผ ํ ์๋ ์์ต๋๋ค. ์์ ๊ฐ์ ์ฌ์ฉํ๋ฉด HEX, RGB ๋๋ HSL ๊ฐ์ ์ฌ์ฉํ์ฌ ์์์ ์ ์ํ ์ ์์ต๋๋ค.
<button class="bg-[#FF5733] hover:bg-[#C92200] text-white font-bold py-2 px-4 rounded">
Custom Color Button
</button>
์ด ์์์์๋ ๋ฐฐ๊ฒฝ์ ์ปค์คํ
์ฃผํฉ์ #FF5733
์, ํธ๋ฒ ์ํ์๋ ๋ ์ด๋์ด ์์์ธ #C92200
์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ด๋ฅผ ํตํด Tailwind ์ค์ ์ ํ์ฅํ์ง ์๊ณ ๋ ๋ธ๋๋ ์์์ ์์์ ์ง์ ์ฝ์
ํ ์ ์์ต๋๋ค.
3. ์ปค์คํ ๊ธ๊ผด ํฌ๊ธฐ ๋ฐ ์ค ๊ฐ๊ฒฉ ์ฌ์ฉ
์์ ๊ฐ์ Tailwind์ ๊ธฐ๋ณธ ํ์ดํฌ๊ทธ๋ํผ ์ค์ผ์ผ์์ ๋ฒ์ด๋ ํน์ ๊ธ๊ผด ํฌ๊ธฐ ๋ฐ ์ค ๊ฐ๊ฒฉ์ ์ค์ ํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค. ์ด๋ ํนํ ๋ค์ํ ์ธ์ด์ ์คํฌ๋ฆฝํธ์์ ๊ฐ๋ ์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ์ค์ํ ์ ์์ต๋๋ค.
<p class="text-[1.125rem] leading-[1.75]">
This paragraph has a custom font size and line height.
</p>
์ด ์์๋ ๊ธ๊ผด ํฌ๊ธฐ๋ฅผ 1.125rem
(18px)๋ก, ์ค ๊ฐ๊ฒฉ์ 1.75
(๊ธ๊ผด ํฌ๊ธฐ ๊ธฐ์ค)๋ก ์ค์ ํ์ฌ ๊ฐ๋
์ฑ์ ํฅ์์ํต๋๋ค.
4. ์ปค์คํ ๋ฐ์ค ์๋์ฐ ์ ์ฉ
๋ฏธ๋ฆฌ ์ ์๋ ํด๋์ค๋ก ๋ ํนํ ๋ฐ์ค ์๋์ฐ ํจ๊ณผ๋ฅผ ๋ง๋๋ ๊ฒ์ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ์์ ๊ฐ์ ์ฌ์ฉํ๋ฉด ์ ํํ ๊ฐ์ผ๋ก ๋ณต์กํ ๋ฐ์ค ์๋์ฐ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.
<div class="shadow-[0_4px_8px_rgba(0,0,0,0.2)] rounded-lg p-4">
This element has a custom box shadow.
</div>
์ฌ๊ธฐ์๋ 8px์ ๋ธ๋ฌ ๋ฐ๊ฒฝ๊ณผ 0.2์ ํฌ๋ช ๋๋ฅผ ๊ฐ์ง ๋ฐ์ค ์๋์ฐ๋ฅผ ์ ์ํ๊ณ ์์ต๋๋ค.
5. ๋ถํฌ๋ช ๋ ์ ์ด
์์ ๊ฐ์ ๋ถํฌ๋ช ๋ ์์ค์ ๋ฏธ์ธ ์กฐ์ ํ๋ ๋ฐ์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋งค์ฐ ๋ฏธ๋ฌํ ์ค๋ฒ๋ ์ด๋ ๋งค์ฐ ํฌ๋ช ํ ๋ฐฐ๊ฒฝ์ด ํ์ํ ์ ์์ต๋๋ค.
<div class="bg-gray-500/20 p-4">
This element has a background with 20% opacity.
</div>
์ด ๊ฒฝ์ฐ, 20% ๋ถํฌ๋ช ๋์ ํ์ ๋ฐฐ๊ฒฝ์ ์ ์ฉํ์ฌ ๋ฏธ๋ฌํ ์๊ฐ ํจ๊ณผ๋ฅผ ๋ง๋ญ๋๋ค. ์ด๋ ๋ฐํฌ๋ช ์ค๋ฒ๋ ์ด์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
6. Z-Index ์ค์
๋ณต์กํ ๋ ์ด์์์์๋ ์์์ ์์ ์์๋ฅผ ์ ์ดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์์ ๊ฐ์ ์ฌ์ฉํ๋ฉด ๋ชจ๋ z-index ๊ฐ์ ์ง์ ํ ์ ์์ต๋๋ค.
<div class="z-[9999] relative">
This element has a high z-index.
</div>
์์ ๊ฐ ์ฌ์ฉ ์ ๊ณ ๋ ค์ฌํญ
- ์ ์ง๋ณด์์ฑ: ์์ ๊ฐ์ ์ ์ฐ์ฑ์ ์ ๊ณตํ์ง๋ง, ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ฉด HTML์ ์ฝ๊ณ ์ ์งํ๊ธฐ๊ฐ ๋ ์ด๋ ค์์ง ์ ์์ต๋๋ค. ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ์ ๋์ Tailwind ๊ตฌ์ฑ ํ์ผ์ ์ถ๊ฐํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
- ์ผ๊ด์ฑ: ์์ ๊ฐ์ด ์ ๋ฐ์ ์ธ ๋์์ธ ์์คํ ๊ณผ ์ผ์นํ๋์ง ํ์ธํ์ธ์. ํ๋ก์ ํธ ์ ๋ฐ์ ๊ฑธ์ณ ์ผ๊ด๋์ด์ผ ํ๋ ๊ธฐ๋ณธ ์คํ์ผ์ ์์ ๊ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ ํผํ์ธ์.
- PurgeCSS: Tailwind์ PurgeCSS ๊ธฐ๋ฅ์ ์ฌ์ฉ๋์ง ์๋ ์คํ์ผ์ ์๋์ผ๋ก ์ ๊ฑฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ํญ์ ์์ ๊ฐ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ฐ์งํ์ง๋ ๋ชปํ ์ ์์ต๋๋ค. PurgeCSS ๊ตฌ์ฑ์ ์์ ๊ฐ์ ์ฌ์ฉํ๋ ๋ชจ๋ ํด๋์ค๊ฐ ํฌํจ๋์ด ์๋์ง ํ์ธํ์ธ์.
Tailwind CSS ์ปค์คํฐ๋ง์ด์ง: ํ ๋ง ํ์ฅํ๊ธฐ
์์ ๊ฐ์ ์ฆ์ ์คํ์ผ๋ง์ ์ ๊ณตํ์ง๋ง, Tailwind์ ํ
๋ง๋ฅผ ์ปค์คํฐ๋ง์ด์งํ๋ฉด ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์คํ์ผ์ ์ ์ํ๊ณ ํ๋ก์ ํธ์ ์๊ตฌ์ ๋ ์ ๋ง๋๋ก ํ๋ ์์ํฌ๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค. tailwind.config.js
ํ์ผ์ Tailwind์ ํ
๋ง, ์์, ๊ฐ๊ฒฉ, ํ์ดํฌ๊ทธ๋ํผ ๋ฑ์ ์ปค์คํฐ๋ง์ด์งํ๋ ์ค์ฌ ํ๋ธ์
๋๋ค.
tailwind.config.js
ํ์ผ ์ดํดํ๊ธฐ
tailwind.config.js
ํ์ผ์ ํ๋ก์ ํธ์ ๋ฃจํธ์ ์์นํฉ๋๋ค. ์ด ํ์ผ์ theme
๊ณผ plugins
๋ผ๋ ๋ ๊ฐ์ ์ฃผ์ ์น์
์ ๊ฐ์ง JavaScript ๊ฐ์ฒด๋ฅผ ๋ด๋ณด๋
๋๋ค. theme
์น์
์์๋ ์ปค์คํ
์คํ์ผ์ ์ ์ํ๊ณ , plugins
์น์
์์๋ Tailwind CSS์ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
module.exports = {
theme: {
// Custom theme configurations
},
plugins: [
// Custom plugins
],
}
ํ ๋ง ํ์ฅํ๊ธฐ
theme
์น์
๋ด์ extend
์์ฑ์ ์ฌ์ฉํ๋ฉด ๊ธฐ์กด ๊ฐ์ ๋ฎ์ด์ฐ์ง ์๊ณ Tailwind์ ๊ธฐ๋ณธ ํ
๋ง์ ์ ๊ฐ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ด๋ ํ๋ ์์ํฌ์ ํต์ฌ ์คํ์ผ์ ๋ณด์กดํ๊ณ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ฏ๋ก Tailwind๋ฅผ ์ปค์คํฐ๋ง์ด์งํ๋ ๋ฐ ์ ํธ๋๋ ๋ฐฉ๋ฒ์
๋๋ค.
module.exports = {
theme: {
extend: {
// Your custom theme extensions
},
},
}
ํ ๋ง ์ปค์คํฐ๋ง์ด์ง ์์
๋ค์์ ํ๋ก์ ํธ์ ๊ณ ์ ํ ๋์์ธ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ Tailwind์ ํ ๋ง๋ฅผ ์ปค์คํฐ๋ง์ด์งํ๋ ๋ช ๊ฐ์ง ์์์ ๋๋ค:
1. ์ปค์คํ ์์ ์ถ๊ฐํ๊ธฐ
theme
๊ฐ์ฒด์ extend
์น์
์์ ์ ์์์ ์ ์ํ์ฌ Tailwind์ ์์ ํ๋ ํธ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
module.exports = {
theme: {
extend: {
colors: {
'brand-primary': '#007bff',
'brand-secondary': '#6c757d',
'brand-accent': '#ffc107',
},
},
},
}
์ด๋ฌํ ์์์ ์ถ๊ฐํ ํ์๋ ๋ค๋ฅธ Tailwind ์์์ฒ๋ผ ์ฌ์ฉํ ์ ์์ต๋๋ค:
<button class="bg-brand-primary text-white font-bold py-2 px-4 rounded">
Primary Button
</button>
2. ์ปค์คํ ๊ฐ๊ฒฉ ์ ์ํ๊ธฐ
์๋ก์ด ๋ง์ง, ํจ๋ฉ, ๋๋น ๊ฐ์ ์ถ๊ฐํ์ฌ Tailwind์ ๊ฐ๊ฒฉ ์ค์ผ์ผ์ ํ์ฅํ ์ ์์ต๋๋ค.
module.exports = {
theme: {
extend: {
spacing: {
'72': '18rem',
'84': '21rem',
'96': '24rem',
},
},
},
}
์ด์ HTML์์ ์ด๋ฌํ ์ปค์คํ ๊ฐ๊ฒฉ ๊ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค:
<div class="mt-72">
This element has a margin-top of 18rem.
</div>
3. ํ์ดํฌ๊ทธ๋ํผ ์ปค์คํฐ๋ง์ด์ง
์ปค์คํ ๊ธ๊ผด ํจ๋ฐ๋ฆฌ, ๊ธ๊ผด ํฌ๊ธฐ, ๊ธ๊ผด ๋๊ป๋ฅผ ์ถ๊ฐํ์ฌ Tailwind์ ํ์ดํฌ๊ทธ๋ํผ ์ค์ ์ ํ์ฅํ ์ ์์ต๋๋ค.
module.exports = {
theme: {
extend: {
fontFamily: {
'sans': ['Inter', 'sans-serif'],
'serif': ['Merriweather', 'serif'],
},
fontSize: {
'xs': '.75rem',
'sm': '.875rem',
'base': '1rem',
'lg': '1.125rem',
'xl': '1.25rem',
'2xl': '1.5rem',
'3xl': '1.875rem',
'4xl': '2.25rem',
'5xl': '3rem',
'6xl': '4rem',
},
},
},
}
์ด๋ฌํ ์ปค์คํ ๊ธ๊ผด ํจ๋ฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค:
<p class="font-sans">
This paragraph uses the Inter font family.
</p>
4. ๊ธฐ๋ณธ ์คํ์ผ ๋ฎ์ด์ฐ๊ธฐ
์ผ๋ฐ์ ์ผ๋ก ํ
๋ง๋ฅผ ํ์ฅํ๋ ๊ฒ์ด ์ ํธ๋์ง๋ง, extend
์์ฑ์ ์ฌ์ฉํ์ง ์๊ณ theme
์น์
์ ์ง์ ๊ฐ์ ์ ์ํ์ฌ Tailwind์ ๊ธฐ๋ณธ ์คํ์ผ์ ๋ฎ์ด์ธ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ธฐ๋ณธ ์คํ์ผ์ ๋ฎ์ด์ฐ๋ฉด ํ๋ก์ ํธ์ ์ผ๊ด์ฑ์ ์ํฅ์ ์ค ์ ์์ผ๋ฏ๋ก ์ฃผ์ํด์ผ ํฉ๋๋ค.
module.exports = {
theme: {
screens: {
'sm': '640px',
'md': '768px',
'lg': '1024px',
'xl': '1280px',
},
// Other theme configurations
},
}
์ด ์์๋ Tailwind์ ๊ธฐ๋ณธ ํ๋ฉด ํฌ๊ธฐ๋ฅผ ๋ฎ์ด์ฐ๋ ๊ฒ์ผ๋ก, ํน์ ์ค๋จ์ ์ ๋ง๊ฒ ๋ฐ์ํ ๋์์ธ์ ์กฐ์ ํ๋ ๋ฐ ์ ์ฉํ ์ ์์ต๋๋ค.
ํ ๋ง ํจ์ ์ฌ์ฉํ๊ธฐ
Tailwind๋ tailwind.config.js
ํ์ผ์ ์ ์๋ ๊ฐ์ ์ ๊ทผํ ์ ์๋ ์ฌ๋ฌ ํ
๋ง ํจ์๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ํจ์๋ ์ปค์คํ
CSS ์์ฑ์ ์ ์ํ๊ฑฐ๋ ํ๋ฌ๊ทธ์ธ์ ๋ง๋ค ๋ ํนํ ์ ์ฉํฉ๋๋ค.
theme('colors.brand-primary')
: ํ ๋ง์ ์ ์๋brand-primary
์์ ๊ฐ์ ๋ฐํํฉ๋๋ค.theme('spacing.4')
: ์ธ๋ฑ์ค 4์ ํด๋นํ๋ ๊ฐ๊ฒฉ ์ค์ผ์ผ ๊ฐ์ ๋ฐํํฉ๋๋ค.theme('fontFamily.sans')
:sans
๊ธ๊ผด์ ๋ํ ๊ธ๊ผด ํจ๋ฐ๋ฆฌ๋ฅผ ๋ฐํํฉ๋๋ค.
์ปค์คํ Tailwind CSS ํ๋ฌ๊ทธ์ธ ๋ง๋ค๊ธฐ
Tailwind CSS ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ฉด ์ปค์คํ ๊ธฐ๋ฅ์ผ๋ก ํ๋ ์์ํฌ๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค. ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ์๋ก์ด ์ ํธ๋ฆฌํฐ ํด๋์ค๋ฅผ ์ถ๊ฐํ๊ฑฐ๋, ๊ธฐ์กด ์คํ์ผ์ ์์ ํ๊ฑฐ๋, ์ฌ์ง์ด ์ ์ฒด ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ ์๋ ์์ต๋๋ค. ์ปค์คํ ํ๋ฌ๊ทธ์ธ์ ๋ง๋๋ ๊ฒ์ ํน์ ํ๋ก์ ํธ ์๊ตฌ์ ๋ง๊ฒ Tailwind CSS๋ฅผ ์กฐ์ ํ๋ ๊ฐ๋ ฅํ ๋ฐฉ๋ฒ์ ๋๋ค. ํ๋ฌ๊ทธ์ธ์ ํนํ ์กฐ์ง ๋ด ํ ๊ฐ์ ์คํ์ผ๋ง ๊ท์น์ ๊ณต์ ํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ ๊ตฌ์กฐ
Tailwind CSS ํ๋ฌ๊ทธ์ธ์ addUtilities
, addComponents
, addBase
, theme
ํจ์๋ฅผ ์ธ์๋ก ๋ฐ๋ JavaScript ํจ์์
๋๋ค. ์ด๋ฌํ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ Tailwind CSS์ ์๋ก์ด ์คํ์ผ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
const plugin = require('tailwindcss/plugin')
module.exports = plugin(function({ addUtilities, addComponents, addBase, theme }) {
// Plugin logic here
})
์์: ์ปค์คํ ๋ฒํผ ํ๋ฌ๊ทธ์ธ ๋ง๋ค๊ธฐ
๊ทธ๋ผ๋ฐ์ด์ ๋ฐฐ๊ฒฝ์ ๊ฐ์ง ์ปค์คํ ๋ฒํผ ์คํ์ผ์ ์ถ๊ฐํ๋ ํ๋ฌ๊ทธ์ธ์ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค:
const plugin = require('tailwindcss/plugin')
module.exports = plugin(function({ addComponents, theme }) {
const buttons = {
'.btn-gradient': {
backgroundColor: theme('colors.blue.500'),
backgroundImage: 'linear-gradient(to right, theme(colors.blue.500), theme(colors.blue.700))',
color: theme('colors.white'),
padding: '.5rem 1rem',
borderRadius: '.25rem',
fontWeight: 'bold',
'&:hover': {
opacity: '.8',
},
},
}
addComponents(buttons)
})
์ด ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ ค๋ฉด tailwind.config.js
ํ์ผ์ plugins
์น์
์ ์ถ๊ฐํด์ผ ํฉ๋๋ค:
module.exports = {
theme: {
extend: {
// Your custom theme extensions
},
},
plugins: [
require('./plugins/button-plugin'), // Path to your plugin file
],
}
ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐํ ํ์๋ HTML์์ .btn-gradient
ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค:
<button class="btn-gradient">
Gradient Button
</button>
ํ๋ฌ๊ทธ์ธ ๊ธฐ๋ฅ
- addUtilities: ์๋ก์ด ์ ํธ๋ฆฌํฐ ํด๋์ค๋ฅผ ์ถ๊ฐํ๋ ๋ฐ ์ฌ์ฉํฉ๋๋ค. ์ด ํด๋์ค๋ค์ ์์์ ์ด๋ฉฐ ๋จ์ผ ๋ชฉ์ ์ ์คํ์ผ๋ง์ ์ํด ์ค๊ณ๋์์ต๋๋ค.
- addComponents: ์๋ก์ด ์ปดํฌ๋ํธ ํด๋์ค๋ฅผ ์ถ๊ฐํ๋ ๋ฐ ์ฌ์ฉํฉ๋๋ค. ์ด๋ค์ ์ผ๋ฐ์ ์ผ๋ก ์ ํธ๋ฆฌํฐ ํด๋์ค๋ณด๋ค ๋ณต์กํ๋ฉฐ ์ฌ๋ฌ ์คํ์ผ์ ๊ฒฐํฉํฉ๋๋ค.
- addBase: ์์์ ๊ธฐ๋ณธ ์คํ์ผ์ ์ถ๊ฐํ๋ ๋ฐ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ๊ธฐ๋ณธ ๋ธ๋ผ์ฐ์ ์คํ์ผ์ ์ฌ์ค์ ํ๊ฑฐ๋
body
๋๋html
๊ณผ ๊ฐ์ ์์์ ์ ์ญ ์คํ์ผ์ ์ ์ฉํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
Tailwind CSS ํ๋ฌ๊ทธ์ธ ์ฌ์ฉ ์ฌ๋ก
- ์๋ก์ด ํผ ์ปจํธ๋กค ๋ฐ ์คํ์ผ ์ถ๊ฐ. ์ฌ๊ธฐ์๋ ๋ ํนํ ๋ชจ์์ ๋ง์ถคํ ์ ๋ ฅ ํ๋, ์ฒดํฌ๋ฐ์ค ๋ฐ ๋ผ๋์ค ๋ฒํผ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
- ์นด๋, ๋ชจ๋ฌ, ๋ด๋น๊ฒ์ด์ ๋ฐ์ ๊ฐ์ ์ปดํฌ๋ํธ ์ปค์คํฐ๋ง์ด์ง. ํ๋ฌ๊ทธ์ธ์ ์น์ฌ์ดํธ ์์์ ํน์ ํ ์คํ์ผ๋ง๊ณผ ๋์์ ์บก์ํํ๋ ๋ฐ ํ์ํฉ๋๋ค.
- ์ปค์คํ ํ์ดํฌ๊ทธ๋ํผ ํ ๋ง ๋ฐ ์คํ์ผ๋ง ์์ฑ. ํ๋ฌ๊ทธ์ธ์ ํ๋ก์ ํธ ์ ๋ฐ์ ์ ์ฉ๋์ด ์คํ์ผ ์ผ๊ด์ฑ์ ์ ์งํ๋ ๋ ํนํ ํ์ดํฌ๊ทธ๋ํผ ๊ท์น์ ์ ์ํ ์ ์์ต๋๋ค.
Tailwind CSS ์ปค์คํฐ๋ง์ด์ง์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
Tailwind CSS๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ปค์คํฐ๋ง์ด์งํ๋ ค๋ฉด ์ผ๊ด์ฑ, ์ ์ง๋ณด์์ฑ ๋ฐ ์ฑ๋ฅ์ ๋ณด์ฅํ๊ธฐ ์ํด ํน์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ผ์ผ ํฉ๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์ฃผ์ ๊ถ์ฅ ์ฌํญ์ ๋๋ค:
- ๋ฎ์ด์ฐ๊ธฐ๋ณด๋ค ํ์ฅ ์ ํธ. ๊ฐ๋ฅํ๋ฉด
tailwind.config.js
ํ์ผ์extend
๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๊ธฐ์กด ๊ฐ์ ๋ฎ์ด์ฐ๋ ๋์ ์ ๊ฐ์ ์ถ๊ฐํ์ธ์. ์ด๋ Tailwind์ ํต์ฌ ์คํ์ผ์ ๊นจ๋จ๋ฆด ์ํ์ ์ต์ํํ๊ณ ๋ณด๋ค ์ผ๊ด๋ ๋์์ธ ์์คํ ์ ๋ณด์ฅํฉ๋๋ค. - ์ปค์คํ
ํด๋์ค ๋ฐ ๊ฐ์ ์ค๋ช
์ ์ธ ์ด๋ฆ ์ฌ์ฉ. ์ปค์คํ
ํด๋์ค๋ ๊ฐ์ ์ ์ํ ๋๋ ๊ทธ ๋ชฉ์ ์ ๋ช
ํํ๊ฒ ์ค๋ช
ํ๋ ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ด๋ ๊ฐ๋
์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํต๋๋ค. ์๋ฅผ ๋ค์ด,
.custom-button
๋์.primary-button
๋๋.cta-button
์ ์ฌ์ฉํ์ธ์. tailwind.config.js
ํ์ผ ์ ๋ฆฌ. ํ๋ก์ ํธ๊ฐ ์ปค์ง๋ฉดtailwind.config.js
ํ์ผ์ด ํฌ๊ณ ๋ณต์กํด์ง ์ ์์ต๋๋ค. ๊ตฌ์ฑ์ ๋ ผ๋ฆฌ์ ์น์ ์ผ๋ก ์ ๋ฆฌํ๊ณ ์ฃผ์์ ์ฌ์ฉํ์ฌ ๊ฐ ์น์ ์ ๋ชฉ์ ์ ์ค๋ช ํ์ธ์.- ์ปค์คํ ์คํ์ผ ๋ฌธ์ํ. ๋ชฉ์ , ์ฌ์ฉ๋ฒ ๋ฐ ๊ด๋ จ ๊ณ ๋ ค ์ฌํญ์ ํฌํจํ์ฌ ์ปค์คํ ์คํ์ผ์ ๋ํ ๋ฌธ์๋ฅผ ์์ฑํ์ธ์. ์ด๋ ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์ปค์คํ ์คํ์ผ์ ํจ๊ณผ์ ์ผ๋ก ์ดํดํ๊ณ ์ฌ์ฉํ ์ ์๋๋ก ๋์ต๋๋ค.
- ์ปค์คํ ์คํ์ผ ์ฒ ์ ํ ํ ์คํธ. ์ปค์คํ ์คํ์ผ์ ํ๋ก๋์ ์ ๋ฐฐํฌํ๊ธฐ ์ ์ ์์๋๋ก ์๋ํ๊ณ ํ๊ท๊ฐ ๋ฐ์ํ์ง ์๋์ง ์ฒ ์ ํ ํ ์คํธํ์ธ์. ์๋ํ๋ ํ ์คํธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ์ธ์.
- Tailwind CSS ๋ฒ์ ์ ์ต์ ์ํ๋ก ์ ์ง. ์๋ก์ด ๊ธฐ๋ฅ, ๋ฒ๊ทธ ์์ ๋ฐ ์ฑ๋ฅ ๊ฐ์ ์ ํ์ฉํ๊ธฐ ์ํด ์ ๊ธฐ์ ์ผ๋ก Tailwind CSS ๋ฒ์ ์ ์ ๋ฐ์ดํธํ์ธ์. ์ ๊ทธ๋ ์ด๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง์นจ์ Tailwind CSS ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
- Tailwind ์ค์ ๋ชจ๋ํ. ํ๋ก์ ํธ๊ฐ ํ์ฅ๋จ์ ๋ฐ๋ผ
tailwind.config.js
ํ์ผ์ ๋ ์๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ๋ชจ๋๋ก ๋๋์ธ์. ์ด๋ ๊ฒ ํ๋ฉด ํ์ ๋ฐ ์ ์ง ๊ด๋ฆฌ๊ฐ ๋ ์ฌ์์ง๋๋ค.
์ ๊ทผ์ฑ ๊ณ ๋ ค์ฌํญ
Tailwind CSS๋ฅผ ์ปค์คํฐ๋ง์ด์งํ ๋๋ ์ฅ์ ๊ฐ ์๋ ์ฌ๋๋ค๋ ์น์ฌ์ดํธ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ์ ๊ทผ์ฑ์ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์ฃผ์ ์ ๊ทผ์ฑ ๊ณ ๋ ค ์ฌํญ์ ๋๋ค:
- ์๋งจํฑ HTML ์ฌ์ฉ. ์๋งจํฑ HTML ์์๋ฅผ ์ฌ์ฉํ์ฌ ์ฝํ ์ธ ์ ๊ตฌ์กฐ์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ์ธ์. ์ด๋ ์คํฌ๋ฆฐ ๋ฆฌ๋ ๋ฐ ๊ธฐํ ๋ณด์กฐ ๊ธฐ์ ์ด ์ฝํ ์ธ ๋ฅผ ์ดํดํ๊ณ ์ฌ์ฉ์์๊ฒ ์๋ฏธ ์๋ ๋ฐฉ์์ผ๋ก ์ ๊ณตํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ์ด๋ฏธ์ง์ ๋์ฒด ํ
์คํธ ์ ๊ณต. ์ด๋ฏธ์ง๋ฅผ ๋ณผ ์ ์๋ ์ฌ์ฉ์๋ฅผ ์ํด ๋ชจ๋ ์ด๋ฏธ์ง์ ์ค๋ช
์ ์ธ ๋์ฒด ํ
์คํธ๋ฅผ ์ถ๊ฐํ์ธ์.
alt
์์ฑ์ ์ฌ์ฉํ์ฌ ๋์ฒด ํ ์คํธ๋ฅผ ์ง์ ํ์ธ์. - ์ถฉ๋ถํ ์์ ๋๋น ๋ณด์ฅ. ์๊ฐ ์ฅ์ ๊ฐ ์๋ ์ฌ๋๋ค์ด ํ ์คํธ๋ฅผ ์ฝ์ ์ ์๋๋ก ํ ์คํธ์ ๋ฐฐ๊ฒฝ์ ๊ฐ์ ์ถฉ๋ถํ ์์ ๋๋น๊ฐ ์๋์ง ํ์ธํ์ธ์. WebAIM ์์ ๋๋น ๊ฒ์ฌ๊ธฐ์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์กฐํฉ์ด ์ ๊ทผ์ฑ ํ์ค์ ์ถฉ์กฑํ๋์ง ํ์ธํ์ธ์.
- ํค๋ณด๋ ๋ด๋น๊ฒ์ด์
์ ๊ณต. ๋ชจ๋ ์ํธ ์์ฉ ์์๊ฐ ํค๋ณด๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ทผํ๊ณ ์กฐ์ํ ์ ์๋์ง ํ์ธํ์ธ์.
tabindex
์์ฑ์ ์ฌ์ฉํ์ฌ ํค๋ณด๋ ํฌ์ปค์ค ์์๋ฅผ ์ ์ดํ์ธ์. - ARIA ์์ฑ ์ฌ์ฉ. ARIA(Accessible Rich Internet Applications) ์์ฑ์ ์ฌ์ฉํ์ฌ UI ์์์ ๊ตฌ์กฐ, ์ํ ๋ฐ ๋์์ ๋ํ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ธ์. ์ด๋ ์คํฌ๋ฆฐ ๋ฆฌ๋ ๋ฐ ๊ธฐํ ๋ณด์กฐ ๊ธฐ์ ์ด ๋ณต์กํ UI ๊ตฌ์ฑ ์์๋ฅผ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
Tailwind CSS์ ๊ธ๋ก๋ฒ ๋์์ธ ์์คํ
Tailwind CSS๋ ์ ํธ๋ฆฌํฐ ์ฐ์ ์ ๊ทผ ๋ฐฉ์๊ณผ ์ปค์คํฐ๋ง์ด์ง ์ต์ ๋๋ถ์ ๊ธ๋ก๋ฒ ๋์์ธ ์์คํ ์ ๊ตฌ์ถํ๋ ๋ฐ ํ๋ฅญํ ์ ํ์ ๋๋ค. ๋์์ธ ์์คํ ์ ์กฐ์ง์ด ๋๊ท๋ชจ๋ก ๋์์ธ์ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉํ๋ ์ผ๋ จ์ ํ์ค์ ๋๋ค. ์ฌ๊ธฐ์๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ตฌ์ฑ ์์, ๋์์ธ ์์น ๋ฐ ์คํ์ผ ๊ฐ์ด๋๊ฐ ํฌํจ๋ฉ๋๋ค.
- ์ผ๊ด์ฑ: Tailwind CSS๋ ์ ํธ๋ฆฌํฐ ์ฐ์ ์ ๊ทผ ๋ฐฉ์์ ์ ์ฉํ์ฌ ๋ชจ๋ ํ๋ก์ ํธ ์์๊ฐ ์คํ์ผ๋ง ์ธก๋ฉด์์ ์ผ๊ด์ฑ์ ์ ์งํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
- ์ ์ง๋ณด์์ฑ: Tailwind CSS๋ ๋ชจ๋ ์คํ์ผ ๋ณ๊ฒฝ์ด ์์ ๋๋ HTML ์์์ ๊ตญํ๋๊ธฐ ๋๋ฌธ์ ํ๋ก์ ํธ์ ์ ์ง๋ณด์์ฑ์ ๋์์ด ๋ฉ๋๋ค.
- ํ์ฅ์ฑ: Tailwind CSS๋ ์ปค์คํฐ๋ง์ด์ง ๋ฐ ํ๋ฌ๊ทธ์ธ ์ง์์ ํตํด ๋์์ธ ์์คํ ์ ๋งค์ฐ ํ์ฅ์ฑ์ด ๋ฐ์ด๋ฉ๋๋ค. ํ๋ก์ ํธ๊ฐ ๋ฐ์ ํจ์ ๋ฐ๋ผ ํน์ ์๊ตฌ ์ฌํญ์ ์์ฉํ๋๋ก ๋์์ธ ์์คํ ์ ์กฐ์ ํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
Tailwind CSS์ ์์ ๊ฐ ์ง์ ๋ฐ ์ปค์คํ ์คํ์ผ๋ง ์ต์ ์ ๋ ํนํ๊ณ ๋ฐ์ํ์ธ ๋์์ธ์ ๋ง๋ค๊ธฐ ์ํ ๊ฐ๋ ฅํ ์กฐํฉ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ดํดํ๊ณ ํ์ฉํจ์ผ๋ก์จ ํ๋ก์ ํธ์ ์๊ตฌ ์ฌํญ์ ์๋ฒฝํ๊ฒ ๋ง๊ฒ Tailwind CSS๋ฅผ ์กฐ์ ํ๊ณ ์๊ฐ์ ์ผ๋ก ๋ฐ์ด๋๊ณ ๊ธฐ๋ฅ์ฑ์ด ๋์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. Tailwind CSS๋ฅผ ์ปค์คํฐ๋ง์ด์งํ ๋ ์ผ๊ด์ฑ, ์ ์ง๋ณด์์ฑ ๋ฐ ์ ๊ทผ์ฑ์ ์ฐ์ ์ํ์ฌ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ๊ธ์ ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด์ฅํ๋ ๊ฒ์ ์์ง ๋ง์ธ์. ์ด๋ฌํ ๊ธฐ์ ์ ๋ง์คํฐํ๋ฉด ๋ณต์กํ ๋์์ธ ๊ณผ์ ๋ฅผ ์์ ์๊ฒ ํด๊ฒฐํ๊ณ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํ ๋ฐ์ด๋ ์น ๊ฒฝํ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.